#3. 循环结构
#3.1 while循环
# 道歉100次，内容:"媳妇,对不起我错了!"
# 1.定义计数器
num = 1
# 2.设置循环条件(不够100次需要重复执行)
while num <= 10: # 条件结果为真，则执行while循环里面的代码
# 3.执行循环代码
    print("媳妇,对不起我错了!")
# 4.修改计数器
    num += 1 # 循环递增：num = num + 1
# 总结：
# 1. while后台跟条件，结果是布尔值（True/False）,当为True时循环才能执行
# 2. 循环体代码必须缩进（tab），记得修改计数器（忘了后果很严重：进入死循环）



# while循环：实现0~100累加求和
# 分析：
# 初始的计算结果为 0
# 1.计算结果 = 0 + 1
# 2.计算结果 = 1 + 2
# 3.计算结果 = 3 + 3
# 4.计算结果 = 6 + 4
# ....
# 100.计算结果 = 上次的结果 + 100
# 推导公式：计算结果 = 上次结果 + 次数
# 1.定义计数器
num = 1
# 定义初始结果变量
result = 0
# 2.设置while循环条件
while num <= 100:
# 3.编写循环代码
    result = result + num # result += num
# 4.修改计数器
    num += 1
# 查看计算结果
print(f"求和的结果为：{result}")
# 思考：求0~100之间的偶数的累加和



#3.2 while循环中的break
# 案例： 一共吃5个苹果， 吃完第一个， 吃第二个...， 这里"吃苹果"是重复动作
# 情况一： 如果吃的过程中， 吃完第三个吃饱了， 则不需要再吃第4个和第五个苹果， 即是吃苹果的动作停止(不再吃苹果)
# 1.定义计数器
num = 1
# 2.设置while循环
while num <= 5:
# 3.编写循环代码
    print(f"吃了第{num}个苹果")
# 判断是否吃饱？ num数量是否是3
    if num == 3:
        print("吃饱了，后面的不吃了")
    break # 当满足循环体里面的某个条件时提前结束循环
# 4.修改计数器
num += 1
# 思考：吃完第三个，吃饱了就不能继续吃（循环提前结束）
# 判断是不是吃完了第三个
# 问题：判断加哪个位置？ ‐‐> 吃完了才能判断是否吃饱，放在吃的后面
# break作用：循环中，当某个条件成立时可以提前结束循环


#3.3 for循环
# 需求：遍历字符串"itheima"，遇到字母e退出循环
# 1.定义字符串变量
info = "itheima"
# 2.遍历取出每个元素（字符）
for i in info:
# 条件判断（遇到字母e退出循环）
    if i == "e":
        break # 循环体中满足某个条件时，可以提前退出循环
# 打印取出的结果
print(i)
# 注意
# for 循环主要用于容器内元素的遍历（遍历完成后自动结束），没有计数器的概念
# 临时变量随便定义，没有初始值，习惯用字母i
# break作用和while循环中的作用一样


#3.4 range函数
# 道歉10次，内容:"媳妇,对不起我错了!"
# for循环实现
# 容器：计数10次
# for i in range(1,11): # 表示整数范围值：1,1,2,3,4,5,6,7,8,9,10
for i in range(10): # 表示整数范围值：0,1,2,3,4,5,6,7,8,9
    print("媳妇,对不起我错了!")


# 3.需求for循环：计算0~100之间所有整数的累加和
# 定义接收结果变量
# result = 0
# # 循环遍历取数据计算
# for i in range(1,101):
# # 取出容器的数据参与计算
# result += i
# # 打印最后计算结果
# print(f"结果：{result}")
# 4.通过for循环：计算0~100之间所有偶数的累计和
# 方式1
result = 0
for i in range(0, 101, 2): # 0,2,4,6,8,....
    result += i
print(result)
# 方式2
result = 0
for i in range(101): # 0,1,2,3,4,....
# 先取出i，然后在判断
    if i % 2 == 0:
        result += i
print(result)
# 范围函数：在for循环中可以记录循环次数，还可以参与计算
# 思考：通过for循环打印出：九九乘法表 ‐‐‐> 提示：循环用到for循环的嵌套



#3.6 课堂案例
# 需求目的：破解密码
# 分析：
# 1.理想状态，一次性搞定
# 2.不理想状态：
# 2.1 一直试，知道破解为止
# 2.2 试一段时间放弃
# 规律：试错这个事没有固定次数（循环） ‐‐> 只能使用while循环
# 结论：次数不确定，可以考虑使用死循环（while后面的条件结果必须是：True），并且不修改计数器
# 1.定义计数器(次数)
# num = 1
# 2.设置while循环条件
while True:
# 3.编写循环代码
# 输入不确定多少次，所以放在循环里面
    username = input("请输入用户名：")
# 判断是否是exit (输入用户之后，先判断，然后再去输入密码)
    if username == "exit":
        break
        password = input("请输入密码：")
        # 判断账号密码
    if username == "admin" and password == "123456":
        print("登录成功！")
        # 结束程序
        break
    else:
        print("用户名或密码错误！")
        # 4.修改计数器
        pass
# 总结：
# 1.先按照题目要把主干代码完成
# 2.思考多次模拟登录的方式需要用到循环，而且是死循环
# 3.所有的模拟操作都需要放在死循环里面，同时需要注意判断的先后次序


